import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}


/**
 * 功能：计算单词个数
 *      文本文件内容:hello spark hello word hello scala
 *
 */
object WordCount {

  def main(args: Array[String]): Unit = {
    //1.创建Spark运行的配置对象  (环境配置)
    //  1.1 local：设置本地运行模式
    //  1.2  setAppName :应用程序名称
    val sparkConf = new SparkConf().setAppName("WordCount").setMaster("local")
    //2. 创建SparkContext对象 (sc)
    //   2.1 创建SparkContext上下文对象
    val sc:SparkContext = new SparkContext(sparkConf)
    //3. 读取文件，计算文件中单词出现个数
    // 3.1 指定输入文件路径
    val inputFilepath =args(0)
    //val inputFilepath = "src\\words.txt"
    var lines: RDD[String] = sc.textFile(inputFilepath)
    //  3.2 按空格分割单词，并压平
    val wordSplit: RDD[String] = lines.flatMap(data => data.split(" "))
    //  3.3 转换结构 (hello,1)(spark,1)...
    var wordRdd: RDD[(String, Int)] = wordSplit.map({ data => (data, 1) })
    val wordCounts :RDD[(String,Int)] = wordRdd.reduceByKey((x,y) => (x + y))
    //4.显示统计结果
    var wordshow: Array[(String, Int)] = wordCounts.collect()
    wordshow.foreach(println)

    // 5.关闭SparkContext对象
    //   5.1 结束任务，回收资源
    sc.stop()


  }
}

